import axios from "axios";
import { rootPath } from "@/config/globalParam";
import { Notification,Message } from "element-ui";
import router from "../router";

const Axios = axios.create({
  // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: rootPath,
  timeout: 100000,
  responseType: "json",
  withCredentials: true, // 是否允许带cookie这些
  headers: {
    "Content-Type": "application/json;charset=utf-8"
  }
});

//添加请求拦截器
Axios.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    config.headers.Authorization = "Bearer " + sessionStorage.getItem("token");
    return config;
  },
  error => {
    return Promise.reject(error.data.error.message);
  }
);

//返回状态判断(添加响应拦截器)
Axios.interceptors.response.use(
  res => {
    if(res.data.code == '200'){
      return res.data;
    }else if(res.data.code == '405'){
      Message({
        message: '登录已过期，请重新登录',
        type: 'warning',
        duration:2000
      });
      router.push({
        path:'login'
      })
    }
    
  },
  error => {
    if (error.response.status == "500") {
      Notification.error({
        title: "服务器发生错误[500]",
        message: "请重新请求,或者联系管理员",
        duration: 3000
      });
    }
    if (error.response.status == "502") {
      Notification.error({
        title: "服务器发生错误[502]",
        message: "请重新请求,或者联系管理员",
        duration: 3000
      });
    }
    if (error.response.status == "404") {
      Notification.error({
        title: "服务器发生错误[404]",
        message: "请求不存在,请联系管理员",
        duration: 3000
      });
    }
    if (error.response.status == "400") {
      Notification.error({
        title: "服务器发生错误[400]",
        message: "请重新请求,或者联系管理员",
        duration: 3000
      });
    }

    return Promise.reject(error.response.status);
  }
);

// 对axios的实例重新封装成一个plugin ,方便 Vue.use(xxxx)
/* eslint-disable */
export default {
  Axios,
  install: function (Vue, Option) {
    Object.defineProperty(Vue.prototype, "$http", { value: Axios });
  }
};
